Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Rendered • View rawDownload


lang/README.zh.md 3f7ef731b5effd9aa3a81eceea66fd6c2b56498c (3f7ef731) Text, 18.24 KB

Reticulum MeshChatX


Liam Cottle 开发的 Reticulum MeshChat 的一个功能丰富的深度修改分支。

本项目独立于原始 Reticulum MeshChat 项目,与其无关联。

• 网站: meshchatx.com
• 变更日志: CHANGELOG.md
• 捐赠: donate.md (捐赠)
• LXMF: T383838f489752fbef161c64d65e385a4e9fc74
• Umbrel App Store: apps.umbrel.com/app/meshchatx

<a href="https://apps.obtainium.imranr.dev/redirect.html?r=obtainium://add/https://github.com/Quad4-Software/MeshChatX"><img src="https://raw.githubusercontent.com/ImranR98/Obtainium/main/assets/graphics/badge_obtainium.png" height="60" alt="Get it on Obtainium"></a>

rngit NomadNet Node: T3838385399f5a0212477618821e91e88ce053b:/page/index.mu

rngit: T383838git clone rns://926baefe13daf5178c174f158dae1b45/quad4/MeshChatX

MeshChatX NomadNet Node: T383838c10d80b1a42fa958c37a6cc30dc04f53:/page/index.mu

与 Reticulum MeshChat 的重要差异

• 通话使用 LXST
• 以原生 SQL 替代 Peewee ORM
• 以原生 T383838fetch 替代 Axios
• 使用 Electron 41.x(内置 Node 24 运行时)
• T383838.whl 内置 Web 服务器与前端资源,便于多种部署方式
• i18n
• 使用 PNPM 与 UV 管理依赖

│ [!WARNING] MeshChatX 不保证与旧版 Reticulum MeshChat 的数据兼容。迁移或测试前请备份数据。

│ [!WARNING] 旧系统尚不支持。当前基线为 Python T383838>=3.11 与 Node T383838>=24(Electron 41 与 Node 24
│ 一致;T383838package.json 的 T383838engines 与 CI 同一基线)。

系统要求

• Python T383838>=3.11(来自 T383838pyproject.toml
• Node.js T383838>=24(来自 T383838package.json 的 T383838engines
• pnpm T38383811.1.2(来自 T383838package.json 的 T383838packageManager
• UV(用于 T383838Taskfile.yml 与 CI 工作流)

Browser Versions Required:

Safari 16.4 或更高版本、Chrome 111 或更高版本、Firefox 128 或更高版本(内置 Web UI)。

T282828
task install
task format
task lint
task Tffa657test
task build


安装方式

请按运行环境与打包形式选择。

┌─────────────────────┬──────────┬────────────────────────────┬────────────────────────────────────┐
│ 方式 │ 包含前端 │ 架构 │ 适用场景 │
├─────────────────────┼──────────┼────────────────────────────┼────────────────────────────────────┤
│ Docker 镜像 │ 是 │ T383838linux/amd64, T383838linux/arm64 │ Linux 服务器快速部署 │
│ Python wheel (T383838.whl) │ 是 │ 任何 Python 支持的架构 │ 无需 Node 构建的无头/Web 服务器安… │
│ Linux AppImage │ 是 │ T383838x64, T383838arm64 │ 便携式桌面使用 │
│ Debian 包 (T383838.deb) │ 是 │ T383838x64, T383838arm64 │ Debian/Ubuntu 安装 │
│ RPM 包 (T383838.rpm) │ 是 │ 取决于发布所用 CI 运行环境 │ Fedora/RHEL/openSUSE │
│ 从源码 │ 本地构建 │ 主机架构 │ 开发与自定义构建 │
└─────────────────────┴──────────┴────────────────────────────┴────────────────────────────────────┘

说明:

• GitHub Actions 在单次运行中构建带标签的发行版(Linux wheel/AppImage/deb/rpm、Windows、macOS、Flatpak、标签在 dev/master 上时的 Android APK、SLSA、草稿 Release):T383838.github/workflows/build-release.yml;容器镜像:T383838.github/workflows/docker.yml。分支与 PR 的 Android CI:T383838.github/workflows/android-build.yml
• Linux T383838x64 与 T383838arm64 的 AppImage + DEB 在 GitHub 上构建;RPM 会尝试构建,产出则上传。

Docker

Docker Hub: T383838quad4io/meshchatx
GHCR: T383838ghcr.io/quad4-software/meshchatx

T282828
docker compose up -d

T282828
docker run -d --name reticulum-meshchatx Tffea00\
--restart unless-stopped Tffea00\
--security-opt no-new-privileges:true Tffea00\
--cpusTff7b72=T79c0ff2.0 Tffea00\
--memoryTff7b72=1g Tffea00\
--memory-reservationTff7b72=256m Tffea00\
--pids-limitTff7b72=T79c0ff512 Tffea00\
-p T79c0ff127.0.0.1:8000:8000 Tffea00\
-v meshchatx-config:/config Tffea00\
ghcr.io/quad4-software/meshchatx:latest


若倾向 Docker Hub,可将镜像换为 T383838quad4io/meshchatx:latest

默认 compose 文件映射:

• 主机 T383838127.0.0.1:8000 -> 容器端口 T3838388000
• Docker 命名卷 T383838meshchatx-config -> T383838/config 持久化(与镜像内 meshchat 用户 UID 1000 一致,通常无需为 bind mount 在宿主机执行 T383838chown

可选:挂载宿主机目录

将卷参数改为 T383838-v "$(pwd)/meshchat-config:/config"(Compose 中修改服务的 T383838volumes)。容器以 UID 1000 运行;宿主机目录需对应该用户可写(常见:T383838sudo chown -R 1000:1000 ./meshchat-config)。首次运行前自行创建空目录,可避免 Docker 以不合适权限创建。

查看或删除命名卷

T282828
docker volume inspect meshchatx-config
docker rm -f reticulum-meshchatx
docker volume rm meshchatx-config

从发行版安装

1) Linux AppImage (x64/arm64)

1. 从发行版下载 T383838ReticulumMeshChatX-v<版本>-linux-<架构>.AppImage
2. 赋予执行权限并运行:

T282828
chmod +x ./ReticulumMeshChatX-v*-linux-*.AppImage
./ReticulumMeshChatX-v*-linux-*.AppImage

2) Debian/Ubuntu T383838.deb (x64/arm64)

1. 下载 T383838ReticulumMeshChatX-v<版本>-linux-<架构>.deb
2. 安装:

T282828
sudo apt install ./ReticulumMeshChatX-v*-linux-*.deb

3) RPM 系统

1. 若发行版中存在,下载 T383838ReticulumMeshChatX-v<版本>-linux-<架构>.rpm
2. 安装:

T282828
sudo rpm -Uvh ./ReticulumMeshChatX-v*-linux-*.rpm

4) Python wheel (T383838.whl)

发行版 wheel 包含已构建的前端资源。

T282828
pip install ./reticulum_meshchatx-*-py3-none-any.whl
meshchatx --headless

亦支持 T383838pipx:

T282828
pipx install ./reticulum_meshchatx-*-py3-none-any.whl

从源码运行(Web 服务器模式)

在开发或需要本地定制构建时使用。

T282828
git clone https://github.com/Quad4-Software/MeshChatX.git
Tffa657cd MeshChatX
corepack Tffa657enable
pnpm config Tffa657set verify-store-integrity Tffa657true
pnpm install --frozen-lockfile
pip install Ta5d6ff"uv==0.11.15"
uv lock --check
uv sync --group dev
pnpm run build-frontend
uv run python -m meshchatx.meshchat --headless --host T79c0ff127.0.0.1


关于上述安装命令的说明:

• T383838pnpm install --frozen-lockfile 禁止更新 T383838pnpm-lock.yaml,若 lockfile 与 T383838package.json 不一致则直接失败。这能阻止意外的上游版本被静默安装。
• T383838verify-store-integrity=true 已在项目的 T383838pnpm-workspace.yaml 中设置;显式的 T383838pnpm config set 行同时加固用户级配置。
• pnpm v11+ 默认禁用所有生命周期脚本(T383838preinstall/T383838postinstall)。仅 T383838pnpm-workspace.yaml 中 T383838allowBuilds 列出的包允许执行安装脚本(当前为 T383838electron、T383838electron-winstaller、T383838esbuild)。
• T383838uv lock --check 会在 T383838uv.lock 与 T383838pyproject.toml 不同步时立即失败;随后的 T383838uv sync --group dev 只会从 lock 文件解析依赖。
• 若需严格按 lock 文件安装 UV(不进行隐式刷新),用 T383838pip install "uv==0.11.15" 固定 UV 版本,与 CI 保持一致。

如果确有意愿更新依赖,请在独立提交中运行 T383838pnpm update / T383838uv lock,并在推送前审查生成的 lock 文件 diff。

在沙盒中运行(Linux)

若要在额外隔离文件系统的情况下运行原生 T383838meshchatx(别名:T383838meshchat),可使用 FirejailBubblewrap(T383838bwrap),同时保留 Reticulum 与 Web 界面所需的网络访问。完整示例(pip/pipx、UV、USB 串口说明)见:


从已捆绑或已同步的 T383838meshchatx-docs 文件提供服务时,应用内 文档 列表(MeshChatX 文档)亦会显示同一页面。

Linux 桌面:绘文字字体

绘文字选择器使用系统字体(Electron/Chromium)渲染标准 Unicode 绘文字。若显示为空白方框(“豆腐块”),请安装彩色绘文字字体包并重启应用。

┌────────────────────────────┬───────────────────────────────────────────────────────────────────┐
│ 发行版(示例) │ 软件包 │
├────────────────────────────┼───────────────────────────────────────────────────────────────────┤
│ Arch Linux、Artix、Manjaro │ T383838noto-fonts-emoji(T383838sudo pacman -S noto-fonts-emoji) │
│ Debian、Ubuntu │ T383838fonts-noto-color-emoji(T383838sudo apt install fonts-noto-color-emoji) │
│ Fedora │ T383838google-noto-emoji-color-fonts
└────────────────────────────┴───────────────────────────────────────────────────────────────────┘

安装后若仍异常,可运行 T383838fc-cache -fv。可选:最小安装可再装 T383838noto-fonts 以覆盖更多符号。

从源码构建桌面包

脚本定义于 T383838package.json 与 T383838Taskfile.yml

Linux x64 AppImage + DEB

T282828
pnpm run dist:linux-x64

Linux arm64 AppImage + DEB

T282828
pnpm run dist:linux-arm64

RPM

T282828
pnpm run dist:rpm

或通过 Task:

T282828
task dist:fe:rpm

容器构建(wheel、AppImage、deb、rpm)

T383838Dockerfile.build 执行与 CI 相同的步骤(uv、pnpm、T383838task、APT 等)。面向 linux/amd64(NodeSource amd64 压缩包、Task amd64 二进制)。默认目标为全部;可用 build 参数覆盖。

T383838MESHCHATX_BUILD_TARGETS 可选:T383838all(默认)、T383838wheel 或 T383838electron(x64 与 arm64 的 AppImage + deb、尽力构建 RPM、不含 wheel)。

构建:

T282828
docker build -f Dockerfile.build -t meshchatx-build:local .

仅 wheel:

T282828
docker build -f Dockerfile.build --build-arg Te6edf3MESHCHATX_BUILD_TARGETSTff7b72=wheel -t meshchatx-build:wheel .


将完成镜像中的 T383838/artifacts 拷到本机:

T282828
Te6edf3cidTff7b72=Tff7b72$(docker create meshchatx-build:localTff7b72)
docker cp Ta5d6ff"Tffd700${Te6edf3cidTffd700}Ta5d6ff:/artifactsTa5d6ff" ./meshchatx-artifacts
docker rm Ta5d6ff"Tffd700${Te6edf3cidTffd700}Ta5d6ff"


架构支持

• Docker 镜像: T383838amd64, T383838arm64
• Linux AppImage: T383838x64, T383838arm64
• Linux DEB: T383838x64, T383838arm64
• Windows: T383838x64, T383838arm64(提供构建脚本)
• macOS: 提供构建脚本(T383838arm64、T383838universal),适用于本地构建环境
• Android: 仅 universal APK(见 android/README.md

Android

MeshChatX 支持构建原生 Android APK(不仅限于 Termux)。

从源码构建 APK

在仓库根目录执行:

T282828
T8b949e# 1) 构建 android/app/build.gradle 所需的 Chaquopy 轮子
bash scripts/build-android-wheels-local.sh

T8b949e# 2) 构建 universal APK(每次运行各一 debug + 一 release;见 android/README.md)
Tffa657cd android
./gradlew --no-daemon :app:assembleDebug :app:assembleRelease


单一 Android 变体。Gradle 将完整 T383838meshchatx/ 树同步到 T383838app/src/main/python/meshchatx/,含离线仓库 wheel 包。文档与发布流程仅使用 universal 打包:每次运行各生成一个调试 APK 与一个发布 APK,内含 T383838android/app/build.gradle 中配置的全部原生 ABI。

• 调试:T383838android/app/build/outputs/apk/debug/app-debug.apk
• 发布:T383838android/app/build/outputs/apk/release/app-release-unsigned.apk

说明:

• 发布产物默认未签名,除非配置签名(T383838scripts/sign-android-apks.sh)。
• universal APK 内嵌的原生 ABI 以 T383838android/app/build.gradle 为准(含启用时的 T383838armeabi-v7a)。为 T383838armeabi-v7a 构建 wheel 需本机 T383838ANDROID_HOME 上有 Android SDK(见 T383838android/README.md)。
• 若仓库根存在 T383838dist/reticulum_meshchatx-*.whl(例如 T383838python -m build --wheel -o dist .),刷新内置仓库时优先于 PyPI 使用该 MeshChatX wheel。CI 在 Android Gradle 步骤前会构建该 wheel。

更多文档:


配置

┌────────────────────────┬──────────────────────────────────────┬───────────┬──────────────────────┐
│ 参数 │ 环境变量 │ 默认值 │ 说明 │
├────────────────────────┼──────────────────────────────────────┼───────────┼──────────────────────┤
│ T383838--host │ T383838MESHCHAT_HOST │ T383838127.0.0.1 │ Web 服务器绑定地址 │
│ T383838--port │ T383838MESHCHAT_PORT │ T3838388000 │ Web 服务器端口 │
│ T383838--no-https │ T383838MESHCHAT_NO_HTTPS │ T383838false │ 禁用 HTTPS │
│ T383838--ssl-cert / T383838--ssl-key │ T383838MESHCHAT_SSL_CERT / T383838MESHCHAT_SSL_KEY │ (无) │ PEM 证书与私钥路径… │
│ T383838--rns-log-level │ T383838MESHCHAT_RNS_LOG_LEVEL │ (无) │ Reticulum(RNS)日… │
│ T383838--headless │ T383838MESHCHAT_HEADLESS │ T383838false │ 不自动打开浏览器 │
│ T383838--auth │ T383838MESHCHAT_AUTH │ T383838false │ 启用基本认证 │
│ T383838--reset-password │ T383838MESHCHAT_RESET_PASSWORD │ T383838false │ 清除已保存的密码哈… │
│ T383838--storage-dir │ T383838MESHCHAT_STORAGE_DIR │ T383838./storage │ 数据目录 │
│ T383838--public-dir │ T383838MESHCHAT_PUBLIC_DIR │ 自动/捆绑 │ 前端文件目录(源码… │
└────────────────────────┴──────────────────────────────────────┴───────────┴──────────────────────┘

分支

┌────────┬──────────────────────────────────────────┐
│ 分支 │ 用途 │
├────────┼──────────────────────────────────────────┤
│ T383838master │ 稳定发布。仅限生产就绪代码。 │
│ T383838dev │ 活跃开发。可能包含不稳定或不完整的更改。 │
└────────┴──────────────────────────────────────────┘

开发

T383838Taskfile.yml 中的常用任务:

T282828
task install
task format
task lint
task Tffa657test
task build


T383838Makefile 目标为委托给 T383838task 的薄封装(与上文命令相同):

┌──────────────┬──────────────┬─────────────────────────────────────────────┐
│ 命令 │ 委托至 │ 说明 │
├──────────────┼──────────────┼─────────────────────────────────────────────┤
│ T383838make install │ T383838task install │ 安装 pnpm 与 UV 依赖 │
│ T383838make run │ T383838task run │ 通过 UV 运行 MeshChatX │
│ T383838make build │ T383838task build │ 构建前端与后端产物 │
│ T383838make lint │ T383838task lint │ ESLint、vue-tsc、knip、Ruff 与 basedpyright │
│ T383838make test │ T383838task test │ 运行前端与后端测试 │
│ T383838make clean │ T383838task clean │ 移除构建产物与 node_modules │
└──────────────┴──────────────┴─────────────────────────────────────────────┘

版本管理

本仓库当前版本: T3838384.8.0

• 发布版本号T383838package.jsonT383838version
• 运行 T383838pnpm run version:sync(在 T383838pnpm run build 开头也会执行)可将该版本同步到 T383838pyproject.tomlT383838meshchatx/src/version.pyT383838THIRD_PARTY_NOTICES.txt(产品行)、README / lang/README.\* 中的“当前版本”行、T383838docs/meshchatx_on_raspberry_pi.md 的 pipx 示例,以及 T383838packaging/arch/PKGBUILD 的辅助字段。
T383838meshchatx.__version__T383838meshchatx/src/version.py 读取且不导入 T383838meshchatx.src,因此普通 T383838import meshchatx 仍很轻量。
变更日志在发版时仍由人工维护。

安全

• 应用运行时内置完整性检查与默认 HTTPS/WSS。
• CI 与发行构建在 GitHub Actions。

添加语言

作者流程:ArgosTranslate,再到本地 LLM(Qwen 3 + Gemma 4)。

之后欢迎通过 LXMF 或其他方式提交修正。

语言环境为自动发现。在 T383838meshchatx/src/frontend/locales/ 添加新文件(如 T383838xx.json),键与 T383838en.json 相同,并设顶层 T383838_languageName 作为选择器标签。可复制 T383838en.json 全手工翻译;机器辅助生成(可选)从不要求。

可选:Argos Translate 起步 -- 若需从 T383838en.json 生成初稿,可使用 T383838scripts/argos_translate.py(处理格式、彩色输出,并保护如 T383838{count} 的插值变量)。

T282828
T8b949e# 若尚未安装 argostranslate
pipx install argostranslate

T8b949e# 运行翻译脚本
python scripts/argos_translate.py --from en --to xx --input meshchatx/src/frontend/locales/en.json --output meshchatx/src/frontend/locales/xx.json --name Ta5d6ff"您的语言名称"


任何机器辅助之后,请用 LLM 或人工核对语法、语境与语气(如正式/非正式)。

运行 T383838pnpm test -- tests/frontend/i18n.test.js --run 校验与 T383838en.json 的键一致。

不需要其他代码更改。应用程序、语言选择器和测试在构建时从 T383838meshchatx/src/frontend/locales/ 目录发现所有语言环境。

捐赠

捐赠纯属自愿,用于为本应用的开发提供时间与精力。

捐赠方式: donate.md(Monero、Ko-Fi、Buy Me a Coffee)。

致谢

Liam Cottle - 原始 Reticulum MeshChat
RFnexus - micron 解析器(JavaScript)
markqvist - Reticulum, LXMF, LXST

许可证

项目自有部分采用 0BSD 许可。
源自 Reticulum MeshChat 的原始上游部分继续采用 MIT 许可。
完整文本与声明请见 ../LICENSE


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────